﻿using Microsoft.ML;
using MyML;
using System.IO;

Console.WriteLine("开始测试ML.NET模型预测功能...");

// 设置模型文件路径
string modelPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MLModel.mlnet");
Console.WriteLine($"尝试查找模型文件，初始路径: {modelPath}");

// 确保模型文件存在
if (!File.Exists(modelPath))
{
    Console.WriteLine($"错误：模型文件不存在于路径 {modelPath}");
    Console.WriteLine($"尝试在其他位置查找模型文件...");
    
    // 尝试在当前目录查找
    string currentDirPath = Path.Combine(Directory.GetCurrentDirectory(), "MLModel.mlnet");
    Console.WriteLine($"尝试在当前目录查找: {currentDirPath}");
    if (File.Exists(currentDirPath))
    {
        Console.WriteLine($"在当前目录找到模型文件: {currentDirPath}");
        modelPath = currentDirPath;
    }
    else
    {
        Console.WriteLine($"在当前目录未找到模型文件");
        
        // 尝试在项目目录查找
        string projectDirPath = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), "..", "..", "..", "MyML", "MLModel.mlnet"));
        Console.WriteLine($"尝试在项目目录查找: {projectDirPath}");
        if (File.Exists(projectDirPath))
        {
            Console.WriteLine($"在项目目录找到模型文件: {projectDirPath}");
            modelPath = projectDirPath;
        }
        else
        {
            Console.WriteLine($"警告：无法找到模型文件，预测可能会失败并使用备选算法");
        }
    }
}
else
{
    Console.WriteLine($"找到模型文件: {modelPath}");
}

// 测试模型预测
try
{
    Console.WriteLine("开始预测测试...");
    
    // 测试多个日期的预测
    TestPrediction(2026, 1, 1);
    TestPrediction(2026, 11, 15);
    TestPrediction(2026, 111, 1);
    TestPrediction(2026, 11, 1);
    TestPrediction(2026, 11, 15);
    TestPrediction(2026, 11, 31);
    TestPrediction(2026, 11, 1);
    
    Console.WriteLine("预测测试完成！");
}
catch (Exception ex)
{
    Console.WriteLine($"模型预测错误: {ex.Message}");
    Console.WriteLine($"堆栈跟踪: {ex.StackTrace}");
}

// 测试预测函数
void TestPrediction(int year, int month, int day)
{
    try
    {
        // 创建测试输入
        var input = new MLModel.ModelInput
        {
            Year = year,
            Month = month,
            Day = day,
            OutboundQty = 0 // 预测时不使用此值
        };

        // 进行预测
        var prediction = MLModel.Predict(input);

        // 输出预测结果
        Console.WriteLine($"预测日期: {year}-{month:D2}-{day:D2}, 预测出库数量: {prediction.Score}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"预测日期 {year}-{month:D2}-{day:D2} 时出错: {ex.Message}");
    }
}
